/**
 * 
 */
package cn.com.guage.guc.collection.safe;

import java.util.List;
import java.util.UUID;
import java.util.concurrent.CopyOnWriteArrayList;

/**
 * @author yangdechao
 */
public class CopyOnWriteArrayListSafeTest {

	public static void main(String[] args) {

		// 读未加锁，写使用CAS自旋锁，先复制原数组，修改复制的数组，之后把复制数组重新复制给原地址（当数组过大时，复制效率极低），
		//并发过多，CAS碰撞过多，也会影响性能，
		//读取数据是原数组，所以如果add方法还未执行到setArray方法，读取的数据就是原来的数据。
		List<String> list = new CopyOnWriteArrayList<>();
		for (int i = 0; i < 30; i++) {
			new Thread(() -> {
				// 向集合添加内容
				list.add(UUID.randomUUID().toString().substring(0, 8));
				// 从集合获取内容
				System.out.println(list);
			}, String.valueOf(i)).start();
		}

	}

}
